package com.twl.app.base.ctrl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.twl.app.base.bo.Dutyservicedao;
import com.twl.app.base.entity.Bfsalary;
import com.twl.app.base.entity.Checktemplet;
import com.twl.app.base.entity.Companyb;
import com.twl.app.base.entity.Dispatchmanger;
import com.twl.app.base.entity.Dutyback;
import com.twl.app.base.entity.Dutycount;
import com.twl.app.base.entity.Dutydeduct;
import com.twl.app.base.entity.Dutymeals;
import com.twl.app.base.entity.Dutymoney;
import com.twl.app.base.entity.Dutysendmoney;
import com.twl.app.base.entity.Jsbfmoney;
import com.twl.app.base.entity.Leavebmoney;
import com.twl.app.base.entity.Loyalward;
import com.twl.app.base.entity.MinMoney;
import com.twl.app.base.entity.Miniwase;
import com.twl.app.base.entity.Moneyadjust;
import com.twl.app.base.entity.OpenState;
import com.twl.app.base.entity.Overtimemeals;
import com.twl.app.base.entity.Overtimemoney;
import com.twl.app.base.entity.Personalduty;
import com.twl.app.base.entity.Personalmoney;
import com.twl.app.base.entity.SalSalaryData;
import com.twl.app.base.entity.SalSocialAdjust;
import com.twl.app.base.entity.Secureunit;
import com.twl.app.base.entity.Shiftallowance;
import com.twl.app.base.entity.Solidmoney;
import com.twl.app.base.entity.Tradecost;
import com.twl.app.base.entity.Uemp;
import com.twl.app.base.util.BigdecUitl;
import com.twl.app.base.util.DateComm;
import com.twl.app.base.util.DuctwayUitl;
import com.twl.app.base.util.SalParamUtils;
import com.twl.app.base.util.TestteNance;
import com.twl.app.base.vo.MenuTest;
import com.twl.app.base.vo.Moneydetail;
import com.twl.app.base.vo.Pagevo;
import com.twl.app.base.vo.SalaryDetailParam;
import com.twl.app.base.vo.Salarydetail;
import com.twl.core.framework.ctrl.AbsCrudCtrl;
import com.twl.core.framework.page.Page;

/***
 * 业务逻辑
 * 
 * @author uatzhangxc
 * 
 */
@Service("dutyseviceImp")
public class DutyseviceImp extends AbsCrudCtrl<Dutyservicedao> {
	@SuppressWarnings("unused")
	private Logger logger = Logger.getLogger(DutyseviceImp.class);
	@Autowired
	private CommonCtrlImpl commonCtrlImpl;
	@Autowired
	private ParamCtrlImpl paramCtrlImpl;

	/***
	 * 税前工资 数据来源不明 解决了
	 * 
	 * @param mm
	 * @return
	 * @throws Exception
	 */
	public String savedutymoney(Checktemplet checktemplet,Uemp emp) throws Exception {
		try {
			Dutymoney dutymoney = new Dutymoney();
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				dutymoney.setStaffint(checktemplet.getStaffint());
				dutymoney.setStafftype(emp.getStafftype());
				dutymoney.setStafftypes(emp.getStafftypes());
				dutymoney.setDatemoney(DateComm.getDateMoney(emp, checktemplet));
				double fomalBu = 0;// 正式员工补发
				double sendOut = 0;// 派遣员工扣减
				double fomalPomat = 0;// 正式员工晋升补发0
				double fomalTop = 0;// 派遣员工上月晋升扣减
				double fomalSound = 0;// 派遣员工隔月补发
				// 补发工资
				List<Bfsalary> BfSalay = bo.findbfsalary(dutymoney.getStaffint(), dutymoney.getDatemoney());
				// 晋升补发
				List<Jsbfmoney> JsMoney = bo.findjsbfmoney(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (BfSalay.size() > 0) {
					Bfsalary SalaryTxt = BfSalay.get(0);
					// 正式员工新进补发工资
					if ("0".equals(SalaryTxt.getStafftype())) {
						// 得到正式员工补发工资
						if (SalaryTxt.getAmountdou() != null && !"".equals(SalaryTxt.getAmountdou())) {

							fomalBu = Double.valueOf(DuctwayUitl.divtwo(Double.valueOf(SalaryTxt.getAmountdou())));
						}
						// 扣减派遣员工
					} else {
						// 得到派遣员工扣减
						if (SalaryTxt.getAmountdou() != null && !"".equals(SalaryTxt.getAmountdou())) {
							sendOut = Double.valueOf(DuctwayUitl.divtwo(Double.valueOf(SalaryTxt.getAmountdou())));
						}
					}
				}
				// 晋升员工是否有数据
				if (JsMoney.size() > 0) {
					Jsbfmoney JsMoneytext = JsMoney.get(0);
					// 正式员工晋升
					if ("0".equals(JsMoneytext.getStafftype())) {
						// 得到补发和晋升工资之和
						if (JsMoneytext.getAmountdou() != null && !"".equals(JsMoneytext.getAmountdou())) {
							fomalPomat = Double.valueOf(DuctwayUitl.divtwo(Double.valueOf(JsMoneytext.getAmountdou())));
						}
						// 派遣员工晋升
					} else if ("1".equals(JsMoneytext.getStafftype())) {
						// 派遣员工上月扣减
						if (null != JsMoneytext.getPromoteint()) {
							if (JsMoneytext.getAmountdou() != null && !"".equals(JsMoneytext.getAmountdou())) {
								fomalTop = Double.valueOf(DuctwayUitl.divtwo(Double.valueOf(JsMoneytext.getAmountdou())));
							}
							// 隔月是补发
						} else {
							if (JsMoneytext.getAmountdou() != null && !"".equals(JsMoneytext.getAmountdou())) {
								fomalSound = Double.valueOf(DuctwayUitl.divtwo(Double.valueOf(JsMoneytext.getAmountdou())));
							}
						}

					}

				}
				// 工资调整
				List<Moneyadjust> Moneylist = bo.findmoneyadjust(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (Moneylist.size() > 0) {
					if (Moneylist.get(0).getAmountdou() != null && !"".equals(Moneylist.get(0).getAmountdou())) {
						dutymoney.setMoneyadjust(Moneylist.get(0).getAmountdou());
					} else {
						dutymoney.setMoneyadjust("0");
					}
				} else {
					dutymoney.setMoneyadjust("0");
				}
				// overtimemonery加班工资
				List<Overtimemoney> over = bo.findovertimemoney(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (over.size() > 0) {
					if (over.get(0).getAmountdou() != null && !"".equals(over.get(0).getAmountdou())) {
						dutymoney.setOvertimemoney(over.get(0).getAmountdou());
					} else {
						dutymoney.setOvertimemoney("0");
					}

				} else {
					dutymoney.setOvertimemoney("0");
				}
				// 加班餐贴
				List<Overtimemeals> overs = bo.findovertimemeals(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (overs.size() > 0) {
					if (overs.get(0).getAmountdou() != null && !"".equals(overs.get(0).getAmountdou())) {
						dutymoney.setOvertimemeals(overs.get(0).getAmountdou());
					} else {
						dutymoney.setOvertimemeals("0");
					}

				} else {
					dutymoney.setOvertimemeals("0");
				}
				// 轮班餐贴
				List<Shiftallowance> ShiTall = bo.findshiftallowance(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (ShiTall.size() > 0) {
					if (ShiTall.get(0).getAmountdou() != null && !"".equals(ShiTall.get(0).getAmountdou())) {
						dutymoney.setShiftallowance(ShiTall.get(0).getAmountdou());
					} else {
						dutymoney.setShiftallowance("0");
					}

				} else {
					dutymoney.setShiftallowance("0");
				}
				// 轮班津贴
				if (ShiTall.size() > 0) {
					if (ShiTall.get(0).getAmountmeals() != null && !"".equals(ShiTall.get(0).getAmountmeals())) {
						dutymoney.setShiftallowances(ShiTall.get(0).getAmountmeals());
					} else {
						dutymoney.setShiftallowances("0");
					}

				} else {
					dutymoney.setShiftallowances("0");
				}
				// 忠诚奖
				List<Loyalward> Loyalward = bo.findloyalward(dutymoney.getStaffint(), dutymoney.getDatemoney());
				if (Loyalward.size() > 0) {
					if (Loyalward.get(0).getAmountdou() != null && !"".equals(Loyalward.get(0).getAmountdou())) {
						dutymoney.setLoyalaward(Loyalward.get(0).getAmountdou());
					} else {
						dutymoney.setLoyalaward("0");
					}

				} else {
					dutymoney.setLoyalaward("0");
				}
				SalSalaryData SalData = commonCtrlImpl.getsalsalarydate(emp.getStaffint(), DateComm.getDateMoney(emp, checktemplet));
				if (SalData != null) {
					// 午餐津贴
					if (SalData.getDutymeals() != null && !"".equals(SalData.getDutymeals())) {
						dutymoney.setLunchAll(SalData.getDutymeals());
					} else {
						dutymoney.setLunchAll("0");
					}
					// 系统运维
					if (SalData.getMainAll() != null && !"".equals(SalData.getMainAll())) {
						SalData.setMainAll(SalData.getMainAll());
					} else {
						SalData.setMainAll("0");
					}
					if (SalData.getOtherAll() != null && !"".equals(SalData.getOtherAll())) {
						SalData.setOtherAll(SalData.getOtherAll());
					} else {
						SalData.setOtherAll("0");
					}
					if (SalData.getRecommWrad() != null && !"".equals(SalData.getRecommWrad())) {
						SalData.setRecommWrad(SalData.getRecommWrad());
					} else {
						SalData.setRecommWrad("0");
					}
					if (SalData.getHighTemp() != null && !"".equals(SalData.getHighTemp())) {
						SalData.setHighTemp(SalData.getHighTemp());
					} else {
						SalData.setHighTemp("0");
					}
					if (SalData.getDutyadds() != null && !"".equals(SalData.getDutyadds())) {
						SalData.setDutyadds(SalData.getDutyadds());
					} else {
						SalData.setDutyadds("0");
					}
					// 税前加 系统运维津贴 其他津贴 推荐奖 高温费 税前加
					double NumBer = TestteNance.getculation(Double.valueOf(SalData.getMainAll()), Double.valueOf(SalData.getOtherAll()), Double.valueOf(SalData.getRecommWrad()), Double.valueOf(SalData.getHighTemp()), Double.valueOf(SalData.getDutyadds()));
					if (NumBer > 0) {
						dutymoney.setDutyadd(new BigDecimal(NumBer));
					} else {
						dutymoney.setDutyadd(new BigDecimal(0));
					}
					// 年终奖 延迟发放年终奖 长效激励奖金
					/*
					 * if (SalData.getYearawrad() != null &&
					 * !"".equals(SalData.getYearawrad())) {
					 * SalData.setYearawrad(SalData.getYearawrad()); } else {
					 */
					SalData.setYearawrad("0");

					if (SalData.getDuyWrad() != null && !"".equals(SalData.getDuyWrad())) {
						SalData.setDuyWrad(SalData.getDuyWrad());
						dutymoney.setDuyWrad(SalData.getDuyWrad());
					} else {
						SalData.setDuyWrad("0");
					}
					if (SalData.getIncenWrad() != null && !"".equals(SalData.getIncenWrad())) {
						SalData.setIncenWrad(SalData.getIncenWrad());
					} else {
						SalData.setIncenWrad("0");
					}
					double YearWrad = TestteNance.getculation(Double.valueOf(SalData.getYearawrad()), Double.valueOf(SalData.getDuyWrad()), Double.valueOf(SalData.getIncenWrad()));
					if (YearWrad > 0) {
						dutymoney.setYearaward(new BigDecimal(YearWrad));
					} else {
						dutymoney.setYearaward(new BigDecimal(0));
					}
					if (SalData.getDutygold() != null && !"".equals(SalData.getDutygold())) {
						dutymoney.setDutygold(SalData.getDutygold());
					} else {
						dutymoney.setDutygold("0");
					}

					// 月度绩效奖 if 月度绩效奖 半年度奖金
					if (SalData.getMonthlyaward() != null && !"".equals(SalData.getMonthlyaward())) {
						SalData.setMonthlyaward(SalData.getMonthlyaward());
					} else {
						SalData.setMonthlyaward("0");
					}
					if (SalData.getHalfYearAwrad() != null && !"".equals(SalData.getHalfYearAwrad())) {
						SalData.setHalfYearAwrad(SalData.getHalfYearAwrad());
					} else {
						SalData.setHalfYearAwrad("0");
					}
					double MonthWrad = TestteNance.getculation(Double.valueOf(SalData.getMonthlyaward()), Double.valueOf(SalData.getHalfYearAwrad()));
					if (MonthWrad > 0) {
						dutymoney.setPerformamcem(new BigDecimal(MonthWrad));
					} else {
						dutymoney.setPerformamcem(new BigDecimal(0));
					}
					// 部门奖励
					// 授权激励奖金 客服绩效奖金 客服保险转介绍奖金 客服高产能激励奖金 客服ALOP/EPP奖金
					// 客服其他奖金 催收奖金 催收其他奖金 直销佣金 直销其他佣金 直销绩效奖金 直销主管奖金
					// 直销年度贡献奖金 直销其他奖金 合肥分中心佣金 合肥分中心其他佣金 合肥分中心绩效奖金 合肥分中心主管奖金
					// 合肥分中心其他奖金 分行卡部销售奖金 分行卡部核卡佣金
					// 分行卡部动卡佣金 分行卡部中高价值分期佣金 分行卡部其他收费类佣金
					// 分行卡部快捷支付佣金 分行卡部关注绑定佣金 分行卡部大额分期签约佣金 分行卡部大额分期交易额佣金
					// 分行卡部万用金佣金 分行卡部分期产品佣金 分行卡部商户签约佣金 分行卡部商户交易额佣金 分行卡部催收还款佣金
					// 分行卡部主管月度奖金
					// 分行卡部主管管理奖金 分行卡部绩效奖金 分行卡部激励奖金 分行卡部其他佣金奖金 分行卡部风险金提取
					// 分行卡部风险金发放 不计卡部成本奖金 分行卡部合规扣款 其他奖金
					// 年假折算
					Double annualWageConvert = StringUtils.isBlank(SalData.getAnnualWageConvert()) ? 0D : Double.valueOf(SalData.getAnnualWageConvert());
					Double brandmaxWrad = StringUtils.isBlank(SalData.getBrandmaxWrad()) ? 0D : Double.valueOf(SalData.getBrandmaxWrad());

					Double branswIwrad = StringUtils.isBlank(SalData.getBranswIwrad()) ? 0D : Double.valueOf(SalData.getBranswIwrad());

					Double branofWrad = StringUtils.isBlank(SalData.getBranofWrad()) ? 0D : Double.valueOf(SalData.getBranofWrad());

					Double brancommWrad = StringUtils.isBlank(SalData.getBrancommWrad()) ? 0D : Double.valueOf(SalData.getBrancommWrad());

					Double brantranWrad = StringUtils.isBlank(SalData.getBrantranWrad()) ? 0D : Double.valueOf(SalData.getBrantranWrad());

					Double bradpayWrad = StringUtils.isBlank(SalData.getBradpayWrad()) ? 0D : Double.valueOf(SalData.getBradpayWrad());

					Double bransupmhWrad = StringUtils.isBlank(SalData.getBransupmhWrad()) ? 0D : Double.valueOf(SalData.getBransupmhWrad());

					Double brandepWrad = StringUtils.isBlank(SalData.getBrandepWrad()) ? 0D : Double.valueOf(SalData.getBrandepWrad());

					Double branperWrad = StringUtils.isBlank(SalData.getBranperWrad()) ? 0D : Double.valueOf(SalData.getBranperWrad());

					Double branatoWrad = StringUtils.isBlank(SalData.getBranatoWrad()) ? 0D : Double.valueOf(SalData.getBranatoWrad());

					Double branoerWrad = StringUtils.isBlank(SalData.getBranoerWrad()) ? 0D : Double.valueOf(SalData.getBranoerWrad());

					Double branextWrad = StringUtils.isBlank(SalData.getBranextWrad()) ? 0D : Double.valueOf(SalData.getBranextWrad());

					Double branriskWrad = StringUtils.isBlank(SalData.getBranriskWrad()) ? 0D : Double.valueOf(SalData.getBranriskWrad());

					Double nobrandWrad = StringUtils.isBlank(SalData.getNobrandWrad()) ? 0D : Double.valueOf(SalData.getNobrandWrad());

					Double brandbitWrad = StringUtils.isBlank(SalData.getBrandbitWrad()) ? 0D : Double.valueOf(SalData.getBrandbitWrad());

					Double otherWrad = StringUtils.isBlank(SalData.getOtherWrad()) ? 0D : Double.valueOf(SalData.getOtherWrad());

					Double autoWrad = StringUtils.isBlank(SalData.getAutoWrad()) ? 0D : Double.valueOf(SalData.getAutoWrad());

					Double cusWrad = StringUtils.isBlank(SalData.getCusWrad()) ? 0D : Double.valueOf(SalData.getCusWrad());

					Double cusicWrad = StringUtils.isBlank(SalData.getCusicWrad()) ? 0D : Double.valueOf(SalData.getCusicWrad());
					Double custYwrad = StringUtils.isBlank(SalData.getCustyWrad()) ? 0D : Double.valueOf(SalData.getCustyWrad());
					Double cusapfWrad = StringUtils.isBlank(SalData.getCusapfWrad()) ? 0D : Double.valueOf(SalData.getCusapfWrad());

					Double custhWrad = StringUtils.isBlank(SalData.getCusthWrad()) ? 0D : Double.valueOf(SalData.getCusthWrad());

					Double collWrad = StringUtils.isBlank(SalData.getCollWrad()) ? 0D : Double.valueOf(SalData.getCollWrad());

					Double collthWrad = StringUtils.isBlank(SalData.getCollthWrad()) ? 0D : Double.valueOf(SalData.getCollthWrad());

					Double directComm = StringUtils.isBlank(SalData.getDirectComm()) ? 0D : Double.valueOf(SalData.getDirectComm());

					Double direthComm = StringUtils.isBlank(SalData.getDirethComm()) ? 0D : Double.valueOf(SalData.getDirethComm());

					Double direperWrad = StringUtils.isBlank(SalData.getDireperWrad()) ? 0D : Double.valueOf(SalData.getDireperWrad());

					Double direamWrad = StringUtils.isBlank(SalData.getDireamWrad()) ? 0D : Double.valueOf(SalData.getDireamWrad());

					Double direanWrad = StringUtils.isBlank(SalData.getDireanWrad()) ? 0D : Double.valueOf(SalData.getDireanWrad());

					Double direthWrad = StringUtils.isBlank(SalData.getDirethWrad()) ? 0D : Double.valueOf(SalData.getDirethWrad());

					Double hfisubWrad = StringUtils.isBlank(SalData.getHfisubWrad()) ? 0D : Double.valueOf(SalData.getHfisubWrad());

					Double hfishWrad = StringUtils.isBlank(SalData.getHfishWrad()) ? 0D : Double.valueOf(SalData.getHfishWrad());

					Double hfiperWrad = StringUtils.isBlank(SalData.getHfiperWrad()) ? 0D : Double.valueOf(SalData.getHfiperWrad());

					Double hfiminWrad = StringUtils.isBlank(SalData.getHfiminWrad()) ? 0D : Double.valueOf(SalData.getHfiminWrad());

					Double hfisthWrad = StringUtils.isBlank(SalData.getHfisthWrad()) ? 0D : Double.valueOf(SalData.getHfisthWrad());

					Double branchWrad = StringUtils.isBlank(SalData.getBranchWrad()) ? 0D : Double.valueOf(SalData.getBranchWrad());

					Double branptWrad = StringUtils.isBlank(SalData.getBranptWrad()) ? 0D : Double.valueOf(SalData.getBranptWrad());

					Double brancaWrad = StringUtils.isBlank(SalData.getBrancaWrad()) ? 0D : Double.valueOf(SalData.getBrancaWrad());

					Double branhgWrad = StringUtils.isBlank(SalData.getBranhgWrad()) ? 0D : Double.valueOf(SalData.getBranhgWrad());

					Double branthWrad = StringUtils.isBlank(SalData.getBranthWrad()) ? 0D : Double.valueOf(SalData.getBranthWrad());

					Double branqkWrad = StringUtils.isBlank(SalData.getBranqkWrad()) ? 0D : Double.valueOf(SalData.getBranqkWrad());

					Double branfwWrad = StringUtils.isBlank(SalData.getBranfwWrad()) ? 0D : Double.valueOf(SalData.getBranfwWrad());

					Double brandtlWrad = StringUtils.isBlank(SalData.getBrandtlWrad()) ? 0D : Double.valueOf(SalData.getBrandtlWrad());
					Double BranWrad = TestteNance.getculation(brandmaxWrad, branswIwrad, branofWrad, annualWageConvert, brancommWrad, brantranWrad, bradpayWrad, bransupmhWrad, brandepWrad, branperWrad, branatoWrad, branoerWrad, branextWrad, branriskWrad, nobrandWrad, brandbitWrad, otherWrad, autoWrad, cusWrad, cusicWrad, cusapfWrad, custhWrad, collWrad, collthWrad, directComm, direthComm, direperWrad, direamWrad, direanWrad, direthWrad, hfisubWrad, hfishWrad, hfiperWrad, hfiminWrad, hfisthWrad, branchWrad, branptWrad, brancaWrad, branhgWrad, branthWrad, branqkWrad, branfwWrad, brandtlWrad, custYwrad);

					if (BranWrad > 0) {
						dutymoney.setBranchmoney(new BigDecimal(BranWrad));
					} else {
						dutymoney.setBranchmoney(new BigDecimal(0));
					}

				}

				// 查询基本工资
				Uemp umpOne = commonCtrlImpl.getUemp(dutymoney.getStaffint());
				if (umpOne != null) {
					dutymoney.setStaffmonery(umpOne.getMoneycount());
				} else {
					dutymoney.setStaffmonery("0");
				}
				BigDecimal de = dutymoney.getYearaward().add(dutymoney.getPerformamcem().add(dutymoney.getBranchmoney()));
				String DateSet = BigdecUitl.formatBigDecimal(de);
				double moneyBig = Double.valueOf(dutymoney.getLoyalaward()) + Double.valueOf(DateSet) + Double.valueOf(dutymoney.getShiftallowances()) + Double.valueOf(dutymoney.getShiftallowance()) + Double.valueOf(dutymoney.getOvertimemeals()) + Double.valueOf(dutymoney.getOvertimemoney()) + Double.valueOf(dutymoney.getLunchAll())// 午餐津贴
						+ Double.valueOf(dutymoney.getMoneyadjust()) + Double.valueOf(dutymoney.getStaffmonery()) + Double.valueOf(dutymoney.getDutyadd().doubleValue()) + Double.valueOf(dutymoney.getDutygold());// 税前一次性奖金
				double mouNey = fomalBu + sendOut + fomalPomat + fomalTop + fomalSound;
				dutymoney.setBfmoney(String.valueOf(mouNey));
				double number = moneyBig + mouNey;
				// 总金额
				dutymoney.setDutycount(String.valueOf(BigdecUitl.round(number, 2)));
				return bo.savedutymoney(dutymoney);
			} else {
				return "失败";
			}

		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 个人保险金
	 * 
	 * @return
	 * @throws Exception
	 */
	public String savepersonalmoney(Checktemplet checktemplet,Uemp emp) throws Exception {
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			// 通过户口类型查询出社保对象再去里面找到相应的比例
			if (emp != null) {
				List<Companyb> companyb = bo.findcompanyb(emp.getHukou());
				if (companyb.size() > 0) {
					for (int i = 0; i < 4; i++) {
						// 判断 公积金个人
						if (i == 0) {
							Personalmoney personalmoney = new Personalmoney();
							personalmoney.setStaffint(checktemplet.getStaffint());
							personalmoney.setStafftype(emp.getStafftype());
							personalmoney.setStafftypes(emp.getStafftype());
							String DateMat = DateComm.getDateMoney(emp, checktemplet);
							personalmoney.setDatemoney(DateMat);
							// 配置基数
							personalmoney.setCardinalnum(new BigDecimal(emp.getAccumuldan()));
							// 户口导入
							personalmoney.setHousetype(emp.getHukou());
							// 0.公积金个人1.养老保险个人2。医疗保险个人3。失业保险个人
							personalmoney.setPersontype("0");
							// 比例
							personalmoney.setScaleint(Double.valueOf(companyb.get(0).getAccumulper()));
							// 总金额

							if ("SHANGHAI".equals(emp.getHukou())) {
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.divdou(BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).doubleValue())));
							} else {
								personalmoney.setAmountdou(String.valueOf(BigdecUitl.round(BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).doubleValue(), companyb.get(0).getCardialadd())));
							}
							bo.savepersonalmoney(personalmoney, i);
							// 判断 养老个人
						} else if (i == 1) {
							Personalmoney personalmoney = new Personalmoney();
							personalmoney.setStaffint(checktemplet.getStaffint());
							personalmoney.setStafftype(emp.getStafftype());
							personalmoney.setStafftypes(emp.getStafftype());
							String DateMat = DateComm.getDateMoney(emp, checktemplet);
							personalmoney.setDatemoney(DateMat);

							// 配置基数
							personalmoney.setCardinalnum(new BigDecimal(emp.getNursingdan()));
							// 户口导入
							personalmoney.setHousetype(emp.getHukou());
							// 0.公积金个人1.养老保险个人2。医疗保险个人3。失业保险个人
							personalmoney.setPersontype("1");
							// 比例
							personalmoney.setScaleint(Double.valueOf(companyb.get(0).getNursingper()));
							// 总金额

							if ("SHANGHAI".equals(emp.getHukou())) {
								BigDecimal numBer = BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).add(new BigDecimal(0.04));
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
							} else {
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.divtwo(BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP), companyb.get(0).getCardinaLdou())));
							}
							bo.savepersonalmoney(personalmoney, i);
							// 判断 医疗个人
						} else if (i == 2) {
							Personalmoney personalmoney = new Personalmoney();
							personalmoney.setStaffint(checktemplet.getStaffint());
							personalmoney.setStafftype(emp.getStafftype());
							personalmoney.setStafftypes(emp.getStafftype());
							String DateMat = DateComm.getDateMoney(emp, checktemplet);
							personalmoney.setDatemoney(DateMat);
							// 配置基数
							personalmoney.setCardinalnum(new BigDecimal(emp.getHealthdan()));
							// 户口导入
							personalmoney.setHousetype(emp.getHukou());
							// 0.公积金个人1.养老保险个人2。医疗保险个人3。失业保险个人
							personalmoney.setPersontype("2");
							// 比例
							personalmoney.setScaleint(Double.valueOf(companyb.get(0).getHealthper()));
							// 总金额
							if ("SHANGHAI".equals(emp.getHukou())) {
								BigDecimal numBer = BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).add(new BigDecimal(0.04));
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));

							} else {
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.divtwo(BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP), companyb.get(0).getCardinaLdou())));
							}
							bo.savepersonalmoney(personalmoney, i);
							// 判断 失业个人
						} else if (i == 3) {
							Personalmoney personalmoney = new Personalmoney();
							personalmoney.setStaffint(checktemplet.getStaffint());
							personalmoney.setStafftype(emp.getStafftype());
							personalmoney.setStafftypes(emp.getStafftype());
							String DateMat = DateComm.getDateMoney(emp, checktemplet);
							personalmoney.setDatemoney(DateMat);

							// 配置基数
							personalmoney.setCardinalnum(new BigDecimal(emp.getUnempdan()));
							// 户口导入
							personalmoney.setHousetype(emp.getHukou());
							// 0.公积金个人1.养老保险个人2。医疗保险个人3。失业保险个人
							personalmoney.setPersontype("3");
							// 比例
							personalmoney.setScaleint(Double.valueOf(companyb.get(0).getUnempper()));
							// 总金额
							if ("SHANGHAI".equals(emp.getHukou())) {
								BigDecimal numBer = BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).add(new BigDecimal(0.04));
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
							} else {
								personalmoney.setAmountdou(String.valueOf(DuctwayUitl.divtwo(BigdecUitl.mul(personalmoney.getCardinalnum().doubleValue(), personalmoney.getScaleint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP), companyb.get(0).getCardinaLdou())));
							}
							bo.savepersonalmoney(personalmoney, i);
						} else {
							System.out.println("导入信息有误 ");
						}
					}
					return "yes";
				} else {
					return "NO";
				}
			} else {
				return "无此人";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加税前扣除 产假数据来源 解决了来源薪资表
	 * 
	 * @param ct
	 *            le 产假
	 * @return
	 * @throws Exception
	 */
	public String saveDutydeduct(Checktemplet checktemplet,Uemp emp) throws Exception {
		Dutydeduct dutydeduct = new Dutydeduct();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				dutydeduct.setStaffint(emp.getStaffint());
				dutydeduct.setStafftype(emp.getStafftype());
				dutydeduct.setStafftypes(emp.getStafftypes());
				String DateFrom = DateComm.getDateMoney(emp, checktemplet);
				dutydeduct.setDatemoney(DateFrom);
				// 增加产假结算
				SalSalaryData SalData = commonCtrlImpl.getsalsalarydate(emp.getStaffint(), DateFrom);
				if (SalData.getMaternityPay() != null && !"".equals(SalData.getMaternityPay())) {
					dutydeduct.setMasettle(SalData.getMaternityPay());
				} else {
					dutydeduct.setMasettle("0");
				}
				// 公积金个人调整 private String accumulPerAdjust;
				// 养老个人调整private String nursingPerAdjust;
				// 医疗个人调整 private String healthPerAdjust;
				// 失业个人调整private String unempPerAdjust;
				SalSocialAdjust adjust = bo.findsalsoialadjust(emp.getStaffint(), DateFrom);
				double NumCount = 0.0;
				if (adjust != null) {
					NumCount = Double.valueOf(adjust.getAccumulPerAdjust()) + Double.valueOf(adjust.getNursingPerAdjust()) + Double.valueOf(adjust.getHealthPerAdjust()) + Double.valueOf(adjust.getUnempPerAdjust());
				}
				// 查询出个人保险金
				List<Personalmoney> personalmoneys = bo.findperson(dutydeduct.getStaffint(), DateFrom);
				double DouCou = 0.0;
				if (personalmoneys.size() > 0) {
					for (int i = 0; i < personalmoneys.size(); i++) {
						if (personalmoneys.get(i).getAmountdou() != null && !"".equals(personalmoneys.get(i).getAmountdou())) {
							DouCou += Double.valueOf(personalmoneys.get(i).getAmountdou());
						}
					}
				}
				// 加入到税前扣除中去
				dutydeduct.setPersonalmoney(String.valueOf(DouCou + NumCount));
				// 查询出请假扣款
				Leavebmoney leavebmoneys = bo.findleaveb(dutydeduct.getStaffint(), DateFrom);
				double DouCunt = 0.0;
				if (leavebmoneys != null) {
					double numBer1 = 0.0;
					if (leavebmoneys.getAmountdou() != null && !"".equals(leavebmoneys.getAmountdou())) {
						numBer1 = Double.valueOf(leavebmoneys.getAmountdou());
					}
					double numBer2 = 0.0;
					if (leavebmoneys.getAmountsick() != null && !"".equals(leavebmoneys.getAmountsick())) {
						numBer2 = Double.valueOf(leavebmoneys.getAmountsick());
					}
					double numBer3 = 0.0;
					if (leavebmoneys.getAmountthing() != null && !"".equals(leavebmoneys.getAmountthing())) {
						numBer3 = Double.valueOf(leavebmoneys.getAmountthing());
					}
					DouCunt = numBer1 + numBer2 + numBer3;
				}
				// 加入请假扣款的总金额
				dutydeduct.setLeavebmoney(String.valueOf(BigdecUitl.round(DouCunt,2)));
				// 总金额
				double numBer = Double.valueOf(dutydeduct.getLeavebmoney()) + Double.valueOf(dutydeduct.getPersonalmoney()) - Double.valueOf(dutydeduct.getMasettle());
				dutydeduct.setAmountdou(String.valueOf(numBer));
				return bo.savedutydeduct(dutydeduct);
			} else {
				return "无信息";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加税前应发工资
	 * 
	 * @return
	 * @throws Exception
	 */
	public String savedutysendmoney(Checktemplet checktemplet,Uemp emp) throws Exception {
		Dutysendmoney dutysendmoney = new Dutysendmoney();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {

				dutysendmoney.setStaffint(checktemplet.getStaffint());
				dutysendmoney.setStafftype(emp.getStafftype());
				dutysendmoney.setStafftypes(emp.getStafftypes());
				String DateFrom = DateComm.getDateMoney(emp, checktemplet);
				dutysendmoney.setDatemoney(DateFrom);
				// 查询税前工资
				List<Dutymoney> dutymoneys = bo.findymoney(dutysendmoney.getStaffint(), DateFrom);
				double CountMoney = 0.0;
				if (dutymoneys.size() > 0) {
					if (dutymoneys.get(0).getDutycount() != null && !"".equals(dutymoneys.get(0).getDutycount())) {
						CountMoney = Double.valueOf(dutymoneys.get(0).getDutycount());
					}
					// 税前工资
					dutysendmoney.setDutymoney(String.valueOf(CountMoney));
				} else {
					dutysendmoney.setDutymoney("0");
				}
				// 税前扣除
				double DutyDou = 0.0;
				List<Dutydeduct> dutydeducts = bo.finddeduct(dutysendmoney.getStaffint(), DateFrom);
				if (dutydeducts.size() > 0) {
					if (dutydeducts.get(0).getAmountdou() != null && !"".equals(dutydeducts.get(0).getAmountdou())) {
						DutyDou = Double.valueOf(dutydeducts.get(0).getAmountdou());
					}
					dutysendmoney.setDutydeduct(String.valueOf(DutyDou));
				} else {
					dutysendmoney.setDutydeduct("0");
				}
				// 计算的出总金额
				double MoneyCount = CountMoney - DutyDou;
				if (MoneyCount > 0) {
					dutysendmoney.setDutycount(String.valueOf(BigdecUitl.round(MoneyCount, 2)));
				} else {
					dutysendmoney.setDutycount("0");
				}
				return bo.savedutysendmoney(dutysendmoney);
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加工会费 出勤天数?? 解决了
	 * 
	 * @param ct
	 * @return
	 * @throws Exception
	 */
	public String savetradecost(Checktemplet checktemplet,Uemp emp) throws Exception {
		Tradecost tradecost = new Tradecost();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				tradecost.setStaffint(checktemplet.getStaffint());
				tradecost.setStafftype(emp.getStafftype());
				tradecost.setStafftypes(emp.getStafftypes());
				String DateFrom = DateComm.getDateMoney(emp, checktemplet);
				tradecost.setDatemoney(DateFrom);
				// 基本工资
				if (emp.getMoneycount() != null) {
					tradecost.setStaffmoney(emp.getMoneycount());
				} else {
					tradecost.setStaffmoney("0");
				}
				// 判断是不是正式员工
				if (emp.getStafftype().equals("0")) {
					// 判断是否是1在职 0入职 2离职
					if (1 == emp.getUmpstaff()) {
						// 得到(基本工资*千分之5)
						BigDecimal mal = BigdecUitl.mul(Double.valueOf(emp.getMoneycount()), 0.005);
						tradecost.setTradecostdou(String.valueOf(DuctwayUitl.divtwo(mal.doubleValue())));
						// 入职
					} else if (0 == emp.getUmpstaff()) {
						// 更新查询日期的方法就能得到正确的日期
						// 得到上月 应出勤天数
						Integer DayCount = commonCtrlImpl.getRuorad(tradecost.getStaffint());
						// 得到上月实际出勤天数
						double FactDay = commonCtrlImpl.getRealityintNew(tradecost.getStaffint());
						// 得到(基本工资*千分之5)

						BigDecimal JbMoney = BigdecUitl.round(BigdecUitl.mul(Double.valueOf(emp.getMoneycount()), 0.005).doubleValue(), 2);
						// 得出工会费
						BigDecimal MoneyCount = BigdecUitl.add(BigdecUitl.mul(BigdecUitl.div(JbMoney.doubleValue(), DayCount, 10).doubleValue(), FactDay).doubleValue(), JbMoney.doubleValue());
						tradecost.setOutforworkint(DayCount.doubleValue());
						tradecost.setOutint(FactDay);
						tradecost.setTradecostdou(String.valueOf(DuctwayUitl.divtwo(MoneyCount.doubleValue())));
						// 离职
					} else if (2 == emp.getUmpstaff()) {
						// 得到本月 应出勤天数
						Integer DayCount = commonCtrlImpl.getOutforworkint(DateFrom);
						// 得到本月实际出勤天数
						double FactDay = 0.0;
						if (emp.getDatedimi() != null) {
							FactDay = commonCtrlImpl.getOutforworkLZ(tradecost.getStaffint());
						}
						// 得到(基本工资*千分之5)
						BigDecimal jbmoneys = BigdecUitl.mul(Double.valueOf(emp.getMoneycount()), 0.005);
						// 得出工会费
						BigDecimal counts = BigdecUitl.mul(BigdecUitl.div(jbmoneys.doubleValue(), DayCount, 10).doubleValue(), FactDay);
						tradecost.setOutforworkint(DayCount.doubleValue());
						tradecost.setOutint(FactDay);
						tradecost.setTradecostdou(String.valueOf(DuctwayUitl.divtwo(counts.doubleValue())));
					}
					return bo.savetradecost(tradecost);
				} else {
					return "非正式";
				}
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加税后饭贴
	 * 
	 * @return
	 * @throws Exception
	 */
	public String savedutyback(Checktemplet checktemplet,Uemp emp) throws Exception {
		Dutyback dutyback = new Dutyback();
		try {
			// 得到员工信息
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				dutyback.setStaffint(emp.getStaffint());
				dutyback.setStafftype(emp.getStafftype());
				dutyback.setStafftypes(emp.getStafftypes());
				String DateFrom = DateComm.getDateMoney(emp, checktemplet);
				dutyback.setDatemoney(DateFrom);
				// 每天

				String TestValue = SalParamUtils.getValueByTypeAndKey(MenuTest.DYPD.toString(), MenuTest.DYKY.toString());
				// 导入每月定额
				double DaySet = 0;
				if (TestValue != null && !"".equals(TestValue)) {
					DaySet = Double.valueOf(TestValue);
				}

				// 每月定额
				String YeuMoney = SalParamUtils.getValueByTypeAndKey(MenuTest.MHTYPE.toString(), MenuTest.MHKEY.toString());

				String MonthMon = YeuMoney;
				if (MonthMon != null && !"".equals(MonthMon)) {
					dutyback.setForeheaddou(new BigDecimal(Double.valueOf(MonthMon)));
				} else {
					dutyback.setForeheaddou(new BigDecimal(0));
				}

				Checktemplet checktemplets = commonCtrlImpl.getChecktemplet(emp.getStaffint());

				// 判断员工信息和考勤是否有这个员工
				if (emp != null && checktemplets != null) {
					// 是否是正式员工
					if (dutyback.getStafftype().equals("0")) {
						// 是否是内设
						if (dutyback.getStafftypes().equals("0")) {
							// 得到事假
							double PerSonalday = 0;
							if (checktemplets.getPersonalday() != null && !"".equals(checktemplets.getPersonalday())) {
								PerSonalday = checktemplets.getPersonalday();
							}
							// 在职
							if (emp.getUmpstaff() == 1) {
								// 得到税后饭贴
								BigDecimal backmoney = BigdecUitl.sub(dutyback.getForeheaddou().doubleValue(), PerSonalday * DaySet);
								dutyback.setJudgeint(0);
								// 本月 事假天数
								dutyback.setLeavebint(PerSonalday);

								dutyback.setAmountdou(BigdecUitl.formatBigDecimal(backmoney));
								// 入职
							} else if (emp.getUmpstaff() == 0) {
								// 查询出实际出勤天数 再乘30元每一天得到上个月的饭贴
								double FonalDay = commonCtrlImpl.getOutforworkintRZ(dutyback.getStaffint()) * DaySet;
								// 假期扣除饭贴
								double DouMoney = DaySet * PerSonalday;
								// 上月在职天数
								dutyback.setIndutyint(Double.valueOf(commonCtrlImpl.getOutforworkintRZ(dutyback.getStaffint())));
								// 本月 事假天数
								dutyback.setLeavebint(PerSonalday);

								dutyback.setJudgeint(1);

								// 得到税后饭贴
								dutyback.setAmountdou(BigdecUitl.formatBigDecimal(BigDecimal.valueOf(dutyback.getForeheaddou().doubleValue() + FonalDay - DouMoney)));
								// 离职
							} else if (emp.getUmpstaff() == 2) {
								// 查询出实际出勤天数 再乘30元每一天得到本月的饭贴
								double FonalDay = commonCtrlImpl.getOutforworkLZ(dutyback.getStaffint()) * DaySet;
								// 假期扣除饭贴
								double DouMoney = DaySet * PerSonalday;
								dutyback.setIndutyint(Double.valueOf(commonCtrlImpl.getOutforworkLZ(dutyback.getStaffint())));
								dutyback.setLeavebint(PerSonalday);
								dutyback.setJudgeint(2);
								// 得到税后饭贴
								dutyback.setAmountdou(BigdecUitl.formatBigDecimal(BigDecimal.valueOf(FonalDay - DouMoney)));
							}
							return bo.saveDutyback(dutyback);
						} else {
							return "no";
						}
					} else {
						return "NO";
					}

				} else {
					return "无信息 ";
				}
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加个人所得税
	 * 
	 * @param let
	 * @return
	 * @throws Exception
	 */

	public String savepersonaldutyone(Checktemplet checktemplet,Uemp emp) throws Exception {

		Personalduty personalduty = new Personalduty();
		try {
			// 得到员工信息
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				personalduty.setStaffint(emp.getStaffint());
				personalduty.setStafftype(emp.getStafftype());
				personalduty.setStafftypes(emp.getStafftypes());
				String ne = DateComm.getDateMoney(emp, checktemplet);
				personalduty.setDatemoney(ne);

				// 计税项工资*税率-速算扣除数
				// 是大陆emp
				if (emp.getMainland() == 0) {
					personalduty.setJudgeint(0);
					// 减去项
					String yeuMoney = SalParamUtils.getValueByTypeAndKey(MenuTest.SUBYES.toString(), MenuTest.SUBYS.toString());
					double yeuMy = Double.valueOf(yeuMoney);

					personalduty.setSubtratdou(String.valueOf(BigdecUitl.round(yeuMy, 2)));
					// 查询税前应发工资
					Dutysendmoney dutylist = bo.finddutysend(emp.getStaffint(), ne);
					double DutyMoney = 0.0;
					if (dutylist != null) {
						if (dutylist.getDutycount() != null && !"".equals(dutylist.getDutycount())) {
							DutyMoney = Double.valueOf(dutylist.getDutycount());
						}

					}
					// 得出计税项工资
					double DutyCont = DutyMoney - Double.valueOf(personalduty.getSubtratdou());

					// 计算税率和速扣除数
					if (DutyCont < 1500.01) {
						double CanNumber = 0.03;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03
						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 0)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 4500.01) {
						double CanNumber = 0.1;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 105)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 9000.01) {
						double CanNumber = 0.2;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03
						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 555)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 35000.01) {
						double CanNumber = 0.25;
						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 1005)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 55000.01) {
						double CanNumber = 0.3;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03+

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 2755)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 80000.01) {
						double CanNumber = 0.35;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 5505)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}

					} else if (DutyCont >= 80000.01) {
						double CanNumber = 0.45;
						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 13505)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					}
					// 非是大陆
				} else if (emp.getMainland() == 1) {
					personalduty.setJudgeint(1);
					// 减去项
					String yeuMoney = SalParamUtils.getValueByTypeAndKey(MenuTest.SUBNO.toString(), MenuTest.SUBNY.toString());
					double yeuMy = Double.valueOf(yeuMoney);

					personalduty.setSubtratdou(String.valueOf(BigdecUitl.round(yeuMy, 2)));
					// 查询税前应发工资
					Dutysendmoney dutysendmoneys = bo.finddutysend(emp.getStaffint(), ne);
					double DutyMoney = 0.0;
					if (dutysendmoneys != null) {
						if (dutysendmoneys.getDutycount() != null && !"".equals(dutysendmoneys.getDutycount())) {
							DutyMoney = Double.valueOf(dutysendmoneys.getDutycount());
						}

					}
					// 得出计税项工资
					double DutyCont = DutyMoney - Double.valueOf(personalduty.getSubtratdou());

					// 计算税率和速扣除数
					if (DutyCont < 1500.01) {
						double CanNumber = 0.03;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03
						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 0)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}

					} else if (DutyCont < 4500.01) {
						double CanNumber = 0.1;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 105)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 9000.01) {
						double CanNumber = 0.2;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03
						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 555)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 35000.01) {
						double CanNumber = 0.25;
						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));
						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 1005)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 55000.01) {
						double CanNumber = 0.3;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03+

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 2755)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					} else if (DutyCont < 80000.01) {
						double CanNumber = 0.35;

						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 5505)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}

					} else if (DutyCont >= 80000.01) {
						double CanNumber = 0.45;
						personalduty.setDutysendmoney(String.valueOf(DutyMoney));
						personalduty.setDutyrate(new BigDecimal(CanNumber));

						// 计算个人所得税 mai*0.03

						personalduty.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.sub(BigdecUitl.mul(DutyCont, personalduty.getDutyrate().doubleValue()).doubleValue(), 13505)));
						if (personalduty.getAmountdou() != null && !"".equals(personalduty.getAmountdou())) {
							if (Double.valueOf(personalduty.getAmountdou()) < 0.0) {
								personalduty.setAmountdou("0");
							}
						}
					}

				} else {
					return "非中国";
				}
				return bo.savepersonalduty(personalduty);
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 二期：个人所得税 延迟年终奖maijiang来计算 不要计算年终奖
	 * 
	 * @return maijiang
	 * @throws Exception
	 */
	@SuppressWarnings("unused")
	public String savepersonalduty(Checktemplet let) throws Exception {
		Personalduty st = new Personalduty();
		try {
			// 得到员工信息
			Uemp emp = commonCtrlImpl.getUemp(let.getStaffint());

			st.setStaffint(emp.getStaffint());
			st.setStafftype(emp.getStafftype());
			st.setStafftypes(emp.getStafftypes());
			String ne = DateComm.getDateMoney(emp, let);
			st.setDatemoney(ne);
			// 年终奖maijiang和参数
			BigDecimal maljiang = new BigDecimal(0);
			if (maljiang != null) {
				maljiang = new BigDecimal(0);
			}
			// 计税项工资*税率-速算扣除数+年终奖*税率-速算扣除数
			// 是大陆emp
			if (emp.getMainland() == 0) {
				// 减去项
				st.setSubtratdou(SalParamUtils.getValueByTypeAndKey(MenuTest.SUBYES.toString(), MenuTest.SUBYS.toString()));
				// 查询税前应发工资
				Dutysendmoney dutysendmoney = bo.finddutysend(emp.getStaffint(), ne);
				double DutyMoney = 0.0;
				if (dutysendmoney != null) {
					if (dutysendmoney.getDutycount() != null && !"".equals(dutysendmoney.getDutycount())) {
						DutyMoney = Double.valueOf(dutysendmoney.getDutycount());
					}
				}
				// 得出计税项工资
				BigDecimal mai = BigdecUitl.sub(DutyMoney, new BigDecimal(st.getSubtratdou()).doubleValue());

				// 计算税率和速扣除数
				if (mai.doubleValue() - 1500.01 == 0.0 || mai.doubleValue() - 1500.01 <= 1500.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.03);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 0).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 0).doubleValue())));
					} else if (maljiang == null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 0).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}

				} else if (mai.doubleValue() - 4500.01 > 1500.01 || mai.doubleValue() - 4500.01 <= 4500.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.1);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);

					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang == null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue())));
					}

				} else if (mai.doubleValue() - 9000.01 > 4500.01 || mai.doubleValue() - 9000.01 <= 9000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.2);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);

					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}

				} else if (mai.doubleValue() - 35000.01 > 9000.01 || mai.doubleValue() - 35000.01 <= 35000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.25);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}

				} else if (mai.doubleValue() - 55000.01 > 35000.01 || mai.doubleValue() - 55000.01 <= 55000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.3);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);

					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}

				} else if (mai.doubleValue() - 80000.01 > 55000.01 || mai.doubleValue() - 80000.01 <= 80000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.35);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);

					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue())));

					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));

					}
				} else if (mai.doubleValue() - 80000.01 > 80000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.45);
					}
					st.setDutysendmoney(String.valueOf(DutyMoney));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}
				}
				// 非是大陆
			} else if (emp.getMainland() == 1) {
				// 减去项
				st.setSubtratdou(SalParamUtils.getValueByTypeAndKey(MenuTest.SUBNO.toString(), MenuTest.SUBNY.toString()));
				// 查询税前应发工资
				Dutysendmoney dutysendmoney = bo.finddutysend(emp.getStaffint(), ne);
				double SendCount = 0.0;
				if (dutysendmoney != null) {
					if (dutysendmoney.getDutycount() != null && !"".equals(dutysendmoney.getDutycount())) {
						SendCount = Double.valueOf(dutysendmoney.getDutycount());
					}
				}
				// 得出计税项工资
				BigDecimal mai = BigdecUitl.sub(SendCount, Double.valueOf(st.getSubtratdou()));

				// 计算税率和速扣除数
				if (mai.doubleValue() - 1500.01 == 0.0 || mai.doubleValue() - 1500.01 <= 1500.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.03);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);

					// 计算个人所得税 mai*0.03+maljiang*0.03
					st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));

				} else if (mai.doubleValue() - 4500.01 > 1500.01 || mai.doubleValue() - 4500.01 <= 4500.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.1);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue())));

					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 105).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}
				} else if (mai.doubleValue() - 9000.01 > 4500.01 || mai.doubleValue() - 9000.01 <= 9000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.2);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					if (maljiang != null) {
						// 计算个人所得税 mai*0.03+maljiang*0.03
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 555).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}

				} else if (mai.doubleValue() - 35000.01 > 9000.01 || mai.doubleValue() - 35000.01 <= 35000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.25);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue())));

					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 1005).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));

					}
				} else if (mai.doubleValue() - 55000.01 > 35000.01 || mai.doubleValue() - 55000.01 <= 55000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.3);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 2755).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}
				} else if (mai.doubleValue() - 80000.01 > 55000.01 || mai.doubleValue() - 80000.01 <= 80000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.35);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03+maljiang*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 5505).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}
				} else if (mai.doubleValue() - 80000.01 > 80000.01) {
					BigDecimal canshu = new BigDecimal(0.00);
					// 判断是否导入年终奖
					if (maljiang != null) {
						canshu = new BigDecimal(0.45);
					}
					st.setDutysendmoney(String.valueOf(SendCount));
					st.setDutyrate(canshu);
					// 计算个人所得税 mai*0.03
					if (maljiang != null) {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue(), BigdecUitl.sub(BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue())));
					} else {
						st.setAmountdou(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(BigdecUitl.mul(mai.doubleValue(), st.getDutyrate().doubleValue()).doubleValue(), 13505).doubleValue(), BigdecUitl.mul(maljiang.doubleValue(), st.getDutyrate().doubleValue()).doubleValue())));
					}
				}

			} else {
				return "非中国";
			}
			return bo.savepersonalduty(st);
		} catch (Exception e) {

			throw e;

		}

	}

	/**
	 * 增加税后应发合计
	 * 
	 * @param count
	 * @return
	 * @throws Exception
	 */
	public String savedutycount(Checktemplet checktemplet,Uemp emp) throws Exception {
		Dutycount dutycount = new Dutycount();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				dutycount.setStaffint(checktemplet.getStaffint());
				dutycount.setStafftype(emp.getStafftype());
				dutycount.setStafftypes(emp.getStafftypes());
				String ne = DateComm.getDateMoney(emp, checktemplet);
				dutycount.setDatemoney(ne);
				// 查询薪资表
				SalSalaryData SalData = commonCtrlImpl.getsalsalarydate(emp.getStaffint(), ne);
				// 独生子女费导入
				if (null != SalData) {
					if (!"".equals(SalData.getParentsonly()) && null != SalData.getParentsonly()) {
						dutycount.setAlonedou(SalData.getParentsonly());
					} else {
						dutycount.setAlonedou("0");
					}
					// 税后一次性奖金
					if (!"".equals(SalData.getAfterbonus()) && null != SalData.getAfterbonus()) {
						dutycount.setBonusdou(SalData.getAfterbonus());
					} else {
						dutycount.setBonusdou("0");
					}
					// 税后调整查询薪资表
					if (!"".equals(SalData.getDutydeduction()) && null != SalData.getDutydeduction()) {
						dutycount.setDutybuckle(SalData.getDutydeduction());
					} else {
						dutycount.setDutybuckle("0");
					}
				} else {
					dutycount.setAlonedou("0");
					dutycount.setBonusdou("0");
					dutycount.setDutybuckle("0");
				}
				// 查询工会费
				Tradecost tradecosts = bo.findtradecost(checktemplet.getStaffint(), ne);

				if (tradecosts != null) {
					// 查询税后饭贴
					List<Dutyback> dutybacks = bo.finddutyback(checktemplet.getStaffint(), ne);
					if (dutybacks.size() > 0) {
						if (dutybacks.get(0).getAmountdou() != null && !"".equals(dutybacks.get(0).getAmountdou())) {
							dutycount.setDutybackdou(dutybacks.get(0).getAmountdou());
						} else {
							dutycount.setDutybackdou("0");
						}
					} else {
						dutycount.setDutybackdou("0");
					}
					// 工会费
					if (tradecosts.getTradecostdou() != null && !"".equals(tradecosts.getTradecostdou())) {
						dutycount.setTradecostdou(tradecosts.getTradecostdou());
					} else {
						dutycount.setTradecostdou("0");
					}
					// 经济补偿金
					if (SalData.getEmicCoption() != null && !"".equals(SalData.getEmicCoption())) {
						SalData.setEmicCoption(SalData.getEmicCoption());
					} else {
						SalData.setEmicCoption("0");
					}
					double CountMoney = Double.valueOf(dutycount.getAlonedou()) - Double.valueOf(dutycount.getTradecostdou()) + Double.valueOf(dutycount.getDutybackdou()) + Double.valueOf(dutycount.getDutybuckle()) + Double.valueOf(dutycount.getBonusdou()) + Double.valueOf(SalData.getEmicCoption());
					// 总金额
					dutycount.setAmountdou(BigdecUitl.formatBigDecimal(new BigDecimal(CountMoney)));
				} else {
					// 查询税后饭贴
					List<Dutyback> dutylist = bo.finddutyback(checktemplet.getStaffint(), ne);
					if (dutylist.size() > 0) {
						if (dutylist.get(0).getAmountdou() != null && !"".equals(dutylist.get(0).getAmountdou())) {
							dutycount.setDutybackdou(dutylist.get(0).getAmountdou());
						} else {
							dutycount.setDutybackdou("0");
						}

					} else {
						dutycount.setDutybackdou("0");
					}
					// 经济补偿金
					if (SalData.getEmicCoption() != null && !"".equals(SalData.getEmicCoption())) {
						SalData.setEmicCoption(SalData.getEmicCoption());
					} else {
						SalData.setEmicCoption("0");
					}
					// 工会费只有正式员工才有所以给个0
					dutycount.setTradecostdou("0");

					double CountMoney = Double.valueOf(dutycount.getAlonedou()) - Double.valueOf(dutycount.getTradecostdou()) + Double.valueOf(dutycount.getDutybackdou()) - Double.valueOf(dutycount.getDutybuckle()) + Double.valueOf(dutycount.getBonusdou()) + Double.valueOf(SalData.getEmicCoption());
					// 总金额
					dutycount.setAmountdou(String.valueOf(BigdecUitl.round(CountMoney, 2)));
				}
				return bo.savedutycount(dutycount);
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加税前饭贴 问题：导入的数据是怎么来的,解决了：会直接导入金额
	 * 
	 * @param ls
	 * @return
	 * @throws Exception
	 */
	public String savedutym(Checktemplet checktemplet,Uemp emp) throws Exception {
		Dutymeals dutymeals = new Dutymeals();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				dutymeals.setStaffint(emp.getStaffint());
				dutymeals.setStafftype(emp.getStafftype());
				dutymeals.setStafftypes(emp.getStafftypes());
				dutymeals.setDatemoney(DateComm.getDateMoney(emp, checktemplet));
				// 查询薪资表
				SalSalaryData SalData = commonCtrlImpl.getsalsalarydate(emp.getStaffint(), DateComm.getDateMoney(emp, checktemplet));
				if (SalData != null) {
					if (SalData.getDutymeals() != null && !"".equals(SalData.getDutymeals())) {
						dutymeals.setAmountdou(SalData.getDutymeals());
					} else {
						dutymeals.setAmountdou("0");
					}
				} else {
					dutymeals.setAmountdou("0");
				}
				return bo.savedutymeals(dutymeals);
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/***
	 * 增加最低工资 问题 参数表里取最低公积金
	 * 
	 * @param m
	 * @return
	 * @throws Exception
	 */
	public String saveminomey(Checktemplet checktemplet,Uemp emp) throws Exception {
		MinMoney minMoney = new MinMoney();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				minMoney.setStaffint(checktemplet.getStaffint());
				minMoney.setStafftype(emp.getStafftype());
				minMoney.setStafftypes(emp.getStafftypes());
				String ne = DateComm.getDateMoney(emp, checktemplet);
				minMoney.setDatemoney(ne);
				double Leamoney = 0.0;
				double sick = 0.0;
				Leavebmoney lem = bo.findleaveb(emp.getStaffint(), ne);
				Checktemplet lets = commonCtrlImpl.getChecktemplet(minMoney.getStaffint());
				double NumBerSet = 0;
				if (lets.getMaternityday() != null && !"".equals(lets.getMaternityday())) {
					NumBerSet = lets.getMaternityday();
				}
				if (lem != null) {
					if (lem.getLeavebsick() != null && lem.getLeavebsick() > 0.0) {
						sick = Double.valueOf(lem.getLeavebsick());
					}
					if (lem.getLeavebint() != null && lem.getLeavebint() > 0.0) {
						lem.setLeavebint(lem.getLeavebint());
					} else {
						lem.setLeavebint(0.0);
					}
					if (lem.getLeavebthing() != null && !"".equals(lem.getLeavebthing())) {
						lem.setLeavebthing(lem.getLeavebthing());
					} else {
						lem.setLeavebthing(0.0);
					}
					Leamoney = lem.getLeavebint() + sick + lem.getLeavebthing() + NumBerSet; // 产假
				}
				// 税前饭贴（午餐津贴）
				List<Dutymoney> dutymoney = bo.findymoney(emp.getStaffint(), ne);
				double dutylunch = 0;
				if (dutymoney.size() > 0) {
					if (dutymoney.get(0).getLunchAll() != null && !"".equals(dutymoney.get(0).getLunchAll())) {
						dutylunch = Double.valueOf(dutymoney.get(0).getLunchAll());
					}
				}
				// 税前应发合计
				// 查询税前工资
				List<Dutymoney> dutymoneys = bo.findymoney(minMoney.getStaffint(), ne);
				double dutymoneyCount = 0.0;
				if (dutymoneys.size() > 0) {
					if (dutymoneys.get(0).getDutycount() != null && !"".equals(dutymoneys.get(0).getDutycount())) {
						dutymoneyCount = Double.valueOf(dutymoneys.get(0).getDutycount());
					}
				}
				// 税前扣除
				double DutyDou = 0.0;
				List<Dutydeduct> dutydeducts = bo.finddeduct(minMoney.getStaffint(), ne);
				if (dutydeducts.size() > 0) {
					if (dutydeducts.get(0).getAmountdou() != null && !"".equals(dutydeducts.get(0).getAmountdou())) {
						DutyDou = Double.valueOf(dutydeducts.get(0).getAmountdou());
					}
				}
				// 加班工资
				List<Overtimemoney> over = bo.findovertimemoney(emp.getStaffint(), ne);
				if (over.size() > 0) {
					if (over.get(0).getAmountdou() != null && !"".equals(over.get(0).getAmountdou())) {
						minMoney.setOvertimemoney(over.get(0).getAmountdou());
					} else {
						minMoney.setOvertimemoney("0");

					}
				} else {
					minMoney.setOvertimemoney("0");
				}
				// 加班餐贴
				List<Overtimemeals> overs = bo.findovertimemeals(emp.getStaffint(), ne);
				if (overs.size() > 0) {
					if (overs.get(0).getAmountdou() != null && !"".equals(overs.get(0).getAmountdou())) {
						minMoney.setOvertimemeals(overs.get(0).getAmountdou());
					} else {
						minMoney.setOvertimemeals("0");
					}
				} else {
					minMoney.setOvertimemeals("0");
				}
				// 轮班餐贴
				List<Shiftallowance> shice = bo.findshiftallowance(emp.getStaffint(), ne);
				if (shice.size() > 0) {
					if (shice.get(0).getAmountdou() != null && !"".equals(shice.get(0).getAmountdou())) {
						minMoney.setShiftallowance(shice.get(0).getAmountdou());
					} else {
						minMoney.setShiftallowance("0");
					}
					// 轮班津贴
					if (shice.get(0).getAmountmeals() != null && !"".equals(shice.get(0).getAmountmeals())) {
						minMoney.setShiftallowances(shice.get(0).getAmountmeals());
					} else {
						minMoney.setShiftallowances("0");
					}
				} else {
					minMoney.setShiftallowance("0");
					minMoney.setShiftallowances("0");
				}

				double doucu = 0.0;
				// 查询出个人保险金
				List<Personalmoney> person = bo.findperson(emp.getStaffint(), ne);
				// 要到参数表里取最低公积金
				double minnum = Double.valueOf(SalParamUtils.getValueByTypeAndKey(MenuTest.MINTYPE.toString(), MenuTest.MINKEY.toString()));
				// 0.公积金个人1.养老保险个人2。医疗保险个人3。失业保险个人
				double PersonOne = 0.0;
				double PersonTwo = 0.0;
				double PersonShree = 0.0;
				double PersonFor = 0.0;
				double accumulPerAdjust = 0.0;
				double nursingPerAdjust = 0.0;
				double healthPerAdjust = 0.0;
				double unempPerAdjust = 0.0;
				SalSocialAdjust socialAdjust = bo.findsalsoialadjust(emp.getStaffint(), ne);
				if (socialAdjust != null) {
					accumulPerAdjust = Double.valueOf(socialAdjust.getAccumulPerAdjust());
					nursingPerAdjust = Double.valueOf(socialAdjust.getNursingPerAdjust());
					healthPerAdjust = Double.valueOf(socialAdjust.getHealthPerAdjust());
					unempPerAdjust = Double.valueOf(socialAdjust.getUnempPerAdjust());
				}
				if (person.size() > 0) {
					for (int i = 0; i < person.size(); i++) {
						if ("0".equals(person.get(i).getPersontype())) {
							if (person.get(i).getAmountdou() != null && !"".equals(person.get(i).getAmountdou())) {
								PersonOne = Double.valueOf(person.get(i).getAmountdou()) + accumulPerAdjust;
							}
						}
						if ("1".equals(person.get(i).getPersontype())) {
							if (person.get(i).getAmountdou() != null && !"".equals(person.get(i).getAmountdou())) {
								PersonTwo = Double.valueOf(person.get(i).getAmountdou()) + nursingPerAdjust;
							}

						}
						if ("2".equals(person.get(i).getPersontype())) {
							if (person.get(i).getAmountdou() != null && !"".equals(person.get(i).getAmountdou())) {
								PersonShree = Double.valueOf(person.get(i).getAmountdou()) + healthPerAdjust;
							}

						}
						if ("3".equals(person.get(i).getPersontype())) {
							if (person.get(i).getAmountdou() != null && !"".equals(person.get(i).getAmountdou())) {
								PersonFor = Double.valueOf(person.get(i).getAmountdou()) + unempPerAdjust;

							}

						}
					}
				}
				// 查询最低工资基数表
				Miniwase wase = bo.findminiwase(emp.getWorkPlace());
				// 最低工资基数
				double lowset = 0.0;
				if (wase != null) {
					if (wase.getIdtext() != null && !"".equals(wase.getIdtext())) {
						lowset = Double.valueOf(wase.getIdtext());
					}
				}

				if (wase != null) {
					if ("1".equals(wase.getVmoney())) {
						doucu += PersonOne + PersonTwo + PersonShree + PersonFor;
					} else if ("2".equals(wase.getVmoney())) {
						doucu += 0;
					} else if ("3".equals(wase.getVmoney())) {
						doucu += PersonTwo + PersonShree + PersonFor;
					} else if ("4".equals(wase.getVmoney())) {
						doucu += PersonTwo + PersonShree + PersonFor + minnum;
					}
				}

				// 个人保险金
				minMoney.setPersonalmoney(String.valueOf(doucu));
				// 个人所得税
				List<Personalduty> duty = bo.finddutyper(emp.getStaffint(), ne);
				if (duty.size() > 0) {
					if (duty.get(0).getAmountdou() != null && !"".equals(duty.get(0).getAmountdou())) {
						minMoney.setPerreporduty(duty.get(0).getAmountdou());
					} else {
						minMoney.setPerreporduty("0");
					}

				} else {
					minMoney.setPerreporduty("0");
				}
				// 查询工会费
				Tradecost tradecost = bo.findtradecost(emp.getStaffint(), ne);
				if (tradecost != null) {
					if (tradecost.getTradecostdou() != null && !"".equals(tradecost.getTradecostdou())) {
						minMoney.setTradecost(tradecost.getTradecostdou());
					} else {
						minMoney.setTradecost("0");
					}

				} else {
					minMoney.setTradecost("0");
				}
				// 计算 先加回个人社保公积金+个人社保公积金调整 再判断当地具体情况
				double CountMoney = dutymoneyCount - DutyDou + PersonOne + PersonTwo + PersonShree + PersonFor - dutylunch - (DuctwayUitl.stringdou(minMoney.getOvertimemoney()) + DuctwayUitl.stringdou(minMoney.getOvertimemeals()) + DuctwayUitl.stringdou(minMoney.getShiftallowance()) + DuctwayUitl.stringdou(minMoney.getShiftallowances()) + DuctwayUitl.stringdou(minMoney.getPersonalmoney()) + DuctwayUitl.stringdou(minMoney.getTradecost()) + DuctwayUitl.stringdou(minMoney.getPerreporduty()));

				// 最低工资标准=最低工资基数x[月实际出勤天数-(病假+事假+旷工+产假)/月应出勤天数]+最低工资基数x0.8/月应出勤工作日x病假天数
				if (0 == emp.getUmpstaff()) {// 入职
					if ("1".equals(emp.getStafftype())) {
						// 应出勤天数
						Integer day = commonCtrlImpl.getOutforworkint(ne);
						// 根据入职日期查询实际出勤天数
						double practical = commonCtrlImpl.getRealityintNew(emp.getStaffint());
						// FIXME
						double MonthDay = (practical - Leamoney) / day;
						double cset = lowset * MonthDay + lowset * 0.8 / day * sick;
						minMoney.setBenchmark(String.valueOf(BigdecUitl.round(cset, 2)));// 最低工资标准
						double NumBer = CountMoney - cset;
						if (NumBer > 0) {
							minMoney.setMincount("0");// 最低工资
						} else {
							double mon = cset - CountMoney;
							minMoney.setMincount(String.valueOf(BigdecUitl.round(mon, 2)));// 最低工资

						}
						return bo.saveminomey(minMoney);
					}
					return null;
				} else if (emp.getUmpstaff() == 1) {// 在职
					// 应出勤天数
					Integer day = commonCtrlImpl.getOutforworkint(ne);
					// FIXME
					double MonthDay = (day - Leamoney) / day;
					double cset = lowset * MonthDay + lowset * 0.8 / day * sick;
					minMoney.setBenchmark(String.valueOf(BigdecUitl.round(cset, 2)));// 最低工资标准
					double NumBer = CountMoney - cset;
					if (NumBer > 0) {
						minMoney.setMincount("0");// 最低工资
					} else {
						double mon = cset - CountMoney;
						minMoney.setMincount(String.valueOf(BigdecUitl.round(mon, 2)));// 最低工资
					}
					return bo.saveminomey(minMoney);
				} else {
					return "没信息";
				}

			} else {
				return "没此人";
			}

		} catch (Exception e) {
			throw e;
		}

	}

	/***
	 * 增加实发工资
	 * 
	 * @param m
	 *            mal
	 * @return
	 * @throws Exception
	 */
	public String savesolidmoney(Checktemplet checktemplet,Uemp emp) throws Exception {
		Solidmoney solidmoney = new Solidmoney();

		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				solidmoney.setStaffint(checktemplet.getStaffint());
				solidmoney.setStafftype(emp.getStafftype());
				solidmoney.setStafftypes(emp.getStafftypes());
				String DateFrom = DateComm.getDateMoney(emp, checktemplet);
				solidmoney.setDatemoney(DateFrom);
				// 最低工资
				MinMoney minMoney = bo.findminmoney(solidmoney.getStaffint(), DateFrom);
				double lowset = 0.0;
				if (minMoney != null) {
					if (minMoney.getMincount() != null && !"".equals(minMoney.getMincount())) {
						lowset = Double.valueOf(minMoney.getMincount());
					}
				}
				// 个人所得税
				List<Personalduty> duty = bo.finddutyper(solidmoney.getStaffint(), DateFrom);
				if (duty.size() > 0) {
					if (duty.get(0).getAmountdou() != null && !"".equals(duty.get(0).getAmountdou())) {
						solidmoney.setPerreporduty(duty.get(0).getAmountdou());
					} else {
						solidmoney.setPerreporduty("0");
					}
				} else {
					solidmoney.setPerreporduty("0");
				}

				// 查询税后应发合计
				List<Dutycount> count = bo.findcount(solidmoney.getStaffint(), DateFrom);
				if (count.size() > 0) {
					if (count.get(0).getAmountdou() != null && !"".equals(count.get(0).getAmountdou())) {
						solidmoney.setDutycount(count.get(0).getAmountdou());
					} else {
						solidmoney.setDutycount("0");
					}
				} else {
					solidmoney.setDutycount("0");
				}
				// 查询税前应发工资
				List<Dutymoney> dutymoneys = bo.findymoney(solidmoney.getStaffint(), DateFrom);
				double dutymoneyCount = 0.0;
				if (dutymoneys.size() > 0) {
					if (dutymoneys.get(0).getDutycount() != null && !"".equals(dutymoneys.get(0).getDutycount())) {
						dutymoneyCount = Double.valueOf(dutymoneys.get(0).getDutycount());
					}
				}
				// 税前扣除
				double DutyDou = 0.0;
				List<Dutydeduct> dutydeducts = bo.finddeduct(solidmoney.getStaffint(), DateFrom);
				if (dutydeducts.size() > 0) {
					if (dutydeducts.get(0).getAmountdou() != null && !"".equals(dutydeducts.get(0).getAmountdou())) {
						DutyDou = Double.valueOf(dutydeducts.get(0).getAmountdou());
					}
				}
				solidmoney.setDutysendmoney(String.valueOf(DuctwayUitl.divtwo(dutymoneyCount - DutyDou)));
				// 算出实发金额
				solidmoney.setMoneycount(BigdecUitl.formatBigDecimal(BigdecUitl.add(BigdecUitl.sub(Double.valueOf(solidmoney.getDutysendmoney()), Double.valueOf(solidmoney.getPerreporduty())).doubleValue(), Double.valueOf(solidmoney.getDutycount()))));
				// 减去个人保险金
				/* solidmoney.setPerdermoney(String.valueOf(doucu)); */
				double number = Double.valueOf(solidmoney.getMoneycount()) + lowset;
				if (number > 0) {
					solidmoney.setMoneycount(BigdecUitl.round(number, 2).toString());
				} else {
					solidmoney.setMoneycount("0");
				}

				return bo.savesolidmoney(solidmoney);
			} else {
				return "无信息";
			}

		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加单位保险金
	 * 
	 * @param it
	 * @return
	 * @return
	 * @throws Exception
	 */
	public void savesecureunit(Checktemplet checktemplet,Uemp emp) throws Exception {

		try {
			//Uemp emp = commonCtrlImpl.getUemp(checktemplet.getStaffint());
			if (emp != null) {
				// 通过户口类型查询出社保对象再去里面找到相应的比例
				List<Companyb> comlist = bo.findcompanyb(emp.getHukou());
				if (comlist.size() > 0) {
					for (int i = 0; i < 6; i++) {
						// 公积金单位
						if (i == 0) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String DateFrom = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(DateFrom);
							its.setHouseholds(comlist.get(0).getNature());
							// 配置基数
							its.setCardinaldou(new BigDecimal(emp.getAccumuldan()));
							// 比例

							its.setScalingint(Double.valueOf(comlist.get(0).getAccumuldan()));
							// 总金额
							BigDecimal malMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue());
							if (malMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {
									BigDecimal mut = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(BigdecUitl.round(mut.doubleValue(), comlist.get(0).getCardialadd())));
								} else {
									its.setAmountdou(BigdecUitl.round(malMbig.doubleValue(), comlist.get(0).getCardialadd()).toString());
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
							// 养老单位
						} else if (i == 1) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String DateFrom = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(DateFrom);
							if (comlist.get(0).getNature() != null && !"".equals(comlist.get(0).getNature())) {
								its.setHouseholds(comlist.get(0).getNature());
							} else {
								its.setHouseholds("0");
							}
							// 配置基数
							its.setCardinaldou(new BigDecimal(emp.getNursingdan()));

							// 比例
							if (comlist.get(0).getNursingdan() != null && !"".equals(comlist.get(0).getNursingdan())) {
								its.setScalingint(Double.valueOf(comlist.get(0).getNursingdan()));
							} else {
								its.setScalingint(0.0);
							}

							// 总金额
							BigDecimal MalMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP);
							if (MalMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {
									BigDecimal numBer = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
								} else {
									its.setAmountdou(String.valueOf(DuctwayUitl.divtwo(MalMbig, comlist.get(0).getCardinaLdou())));
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
							// 医疗单位
						} else if (i == 2) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String DateFrom = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(DateFrom);
							its.setHouseholds(comlist.get(0).getNature());

							// 配置基数

							its.setCardinaldou(new BigDecimal(emp.getHealthdan()));
							// 比例
							if (comlist.get(0).getHealthdan() != null && !"".equals(comlist.get(0).getHealthdan())) {
								its.setScalingint(Double.valueOf(comlist.get(0).getHealthdan()));
							} else {
								its.setScalingint(0.0);
							}

							// 总金额
							BigDecimal malMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP);
							if (malMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {

									BigDecimal numBer = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
								} else {
									its.setAmountdou(String.valueOf(DuctwayUitl.divtwo(malMbig, comlist.get(0).getCardinaLdou())));
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
							// 失业单位
						} else if (i == 3) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String ne = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(ne);

							its.setHouseholds(comlist.get(0).getNature());
							// 配置基数
							its.setCardinaldou(new BigDecimal(emp.getUnempdan()));
							// 比例
							its.setScalingint(Double.valueOf(comlist.get(0).getUnempdan()));
							// 总金额
							BigDecimal malMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP);
							if (malMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {
									BigDecimal numBer = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
								} else {
									its.setAmountdou(String.valueOf(DuctwayUitl.divtwo(malMbig, comlist.get(0).getCardinaLdou())));
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
							// 工伤单位
						} else if (i == 4) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String ne = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(ne);
							its.setHouseholds(comlist.get(0).getNature());
							// 配置基数
							its.setCardinaldou(new BigDecimal(emp.getFirmsdan()));
							// 比例
							its.setScalingint(Double.valueOf(comlist.get(0).getFirmsdan()));
							// 总金额
							BigDecimal malMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP);
							if (malMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {
									BigDecimal numBer = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
								} else {
									its.setAmountdou(String.valueOf(DuctwayUitl.divtwo(malMbig, comlist.get(0).getCardinaLdou())));
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
							// 生育单位
						} else if (i == 5) {
							Secureunit its = new Secureunit();
							its.setStaffint(emp.getStaffint());
							its.setStafftype(emp.getStafftype());
							its.setStafftypes(emp.getStafftypes());
							String ne = DateComm.getDateMoney(emp, checktemplet);
							its.setDatemoney(ne);
							its.setHouseholds(comlist.get(0).getNature());
							// 配置基数
							its.setCardinaldou(new BigDecimal(emp.getFertilitydan()));
							// 比例
							its.setScalingint(Double.valueOf(comlist.get(0).getFertilitydan()));
							// 总金额
							BigDecimal malMbig = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).setScale(3, BigDecimal.ROUND_HALF_UP);
							if (malMbig != null) {
								if ("SHANGHAI".equals(emp.getHukou())) {
									BigDecimal numBer = BigdecUitl.mul(its.getCardinaldou().doubleValue(), its.getScalingint().doubleValue()).add(new BigDecimal(0.04));
									its.setAmountdou(String.valueOf(DuctwayUitl.div(numBer.doubleValue())));
								} else {
									its.setAmountdou(String.valueOf(DuctwayUitl.divtwo(malMbig, comlist.get(0).getCardinaLdou())));
								}
							} else {
								its.setAmountdou("0");
							}
							// 单位
							its.setJudgeint(i);
							bo.savesecureunit(its, i);
						}
					}

				}
			}

		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加税前饭贴 问题：导入的数据是怎么来的,解决了：会直接导入金额
	 * 
	 * @param ls
	 * @return
	 * @throws Exception
	 */
	public String savedutymeals(Checktemplet ch) throws Exception {
		Dutymeals ls = new Dutymeals();
		try {
			Uemp emp = commonCtrlImpl.getUemp(ch.getStaffint());
			if (emp != null) {
				ls.setStaffint(emp.getStaffint());
				ls.setStafftype(emp.getStafftype());
				ls.setStafftypes(emp.getStafftypes());
				ls.setDatemoney(DateComm.getDateMoney(emp, ch));
				List<Dutymoney> list = bo.findymoney(emp.getStaffint(), ls.getDatemoney());
				if (list.size() > 0) {
					if (list.get(0).getDutycount() != null && !"".equals(list.get(0).getDutycount())) {
						ls.setDutytpmoney(list.get(0).getDutycount());// 税前工资
					} else {
						ls.setDutytpmoney("0");// 税前工资
					}
				} else {
					ls.setDutytpmoney("0");// 税前工资
				}

				ls.setStaffint(ch.getStaffint());
				ls.setStafftype(emp.getStafftype());
				ls.setStafftypes(emp.getStafftypes());
				Dutysendmoney dutysendmoney = bo.finddutysend(emp.getStaffint(), ls.getDatemoney());
				if (dutysendmoney != null) {
					if (dutysendmoney.getDutycount() != null && !"".equals(dutysendmoney.getDutycount())) {
						ls.setDutybkmoney(dutysendmoney.getDutycount());// 税后工资
					} else {
						ls.setDutybkmoney("0");// 税后工资
					}

				} else {
					ls.setDutybkmoney("0");// 税后工资
				}

				ls.setAmountdou(BigdecUitl.formatBigDecimal(new BigDecimal(ls.getDutytpmoney()).add(new BigDecimal(ls.getDutybkmoney()))));
				return bo.savedutymeals(ls);
			} else {
				return "NO";
			}
		} catch (Exception e) {
			throw e;
		}

	}

	/**
	 * 增加派遣管理费 1、是否派遣员工 2、不同的派遣公司基数不一致。 3、判断派遣员工所属公司。
	 * 问题1.上月日历日出勤天数和上月实际出勤出勤天数不扣除请假
	 * 
	 * @param der
	 * @return
	 */
	public void savedispatchmanger(Checktemplet der,Uemp emp) {
		Dispatchmanger m = new Dispatchmanger();
		try {
			//Uemp emp = commonCtrlImpl.getUemp(der.getStaffint());
			if (emp != null) {
				m.setStaffint(der.getStaffint());
				m.setStafftype(emp.getStafftype());
				m.setStafftypes(emp.getStafftypes());
				// 日期修改为上个月日期
				String ne = der.getPeriod();
				m.setDatemoney(ne);
				// 公司
				m.setBecomany(emp.getAssailedcom());

				// 判断是否是派遣员工
				if (m.getStafftype().equals("1")) {
					// 公司基数
					String CmpValue = SalParamUtils.getValueByTypeAndKey(MenuTest.DCOM_p.toString(), emp.getAssailedcom());

					// 基数
					if (CmpValue != null && !"".equals(CmpValue)) {
						m.setCardinaldou(new BigDecimal(CmpValue));
					} else {
						m.setCardinaldou(new BigDecimal(0));
					}
					// 是否入职
					if (emp.getUmpstaff() == 0) {
						// 上月日历日出勤天数 包含节假日
						Integer da = commonCtrlImpl.getOutwradint(ne);
						// 上月日历日实际出勤 包含节假日
						double de = commonCtrlImpl.getruforworad(m.getStaffint());
						BigDecimal count = BigdecUitl.mul(BigdecUitl.div(m.getCardinaldou().doubleValue(), da, 10).doubleValue(), de);
						// 计算金额
						m.setAmountdou(BigdecUitl.formatBigDecimal(count));
					}
					// 在职
					if (emp.getUmpstaff() == 1) {
						Integer staffIn = commonCtrlImpl.getOutwradint(ne);

						BigDecimal count = BigdecUitl.mul(BigdecUitl.div(m.getCardinaldou().doubleValue(), staffIn, 10).doubleValue(), staffIn);
						// 计算金额
						m.setAmountdou(BigdecUitl.formatBigDecimal(count));
					}
					// 离职
					if (emp.getUmpstaff() == 2) {
						// 上月日历日出勤天数 包含节假日
						int da = commonCtrlImpl.getOutwradint(ne);
						// 上月日历日实际出勤 包含节假日
						double de = commonCtrlImpl.getforworad(m.getStaffint());
						BigDecimal nnner = BigdecUitl.div(m.getCardinaldou().doubleValue(), da, 10);

						BigDecimal count = BigdecUitl.mul(nnner.doubleValue(), de);
						// 计算金额
						m.setAmountdou(BigdecUitl.formatBigDecimal(count));
					}

					bo.savedispatchmanger(m);
				}
			}

		} catch (Exception e) {
			try {
				throw e;
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

	}

	// ========================================================================
	/**
	 * 前台需要的数据工资信息
	 * 
	 * @param id
	 * @return
	 */
	public Pagevo findsalarydetail(SalaryDetailParam params, Page page) {
		Checktemplet elt = commonCtrlImpl.getChecktemplet(params.getStaffint());
		Uemp emp = commonCtrlImpl.getUemp(elt.getStaffint());
		if (elt != null) {
			List<OpenState> ctrl = paramCtrlImpl.findparamset(DateComm.getNextYearMonth(elt.getPeriod()));
			if (ctrl.size() > 0) {
				OpenState st = ctrl.get(0);
				if ("0".equals(emp.getStafftype())) {
					if ("1".equals(ctrl.get(0).getOpenCheck())) {
						StringBuffer hql = new StringBuffer("from Solidmoney as s  where   s.staffint='" + params.getStaffint() + "' ");
						if (params.getDateBegin() != null && params.getDateEnd() != null) {
							hql.append("and  s.datemoney between  '" + params.getDateBegin() + "'  and  '" + params.getDateEnd() + "'");
						}
						Pagevo result = new Pagevo();
						List<Solidmoney> list = bo.findsalarydetail(hql.toString(), page);
						List<Salarydetail> ile = new ArrayList<Salarydetail>();
						for (Solidmoney so : list) {
							Salarydetail dateile = new Salarydetail();
							if (so.getMoneycount() != null && !"".equals(so.getMoneycount())) {
								dateile.setActual(Double.valueOf(so.getMoneycount()));
							} else {
								dateile.setActual(0.0);
							}
							if (so.getDatemoney() != null && !"".equals(so.getDatemoney())) {
								dateile.setDatemoney(so.getDatemoney());
							} else {
								dateile.setDatemoney("");
							}
							if (so.getDutycount() != null && !"".equals(so.getDutycount())) {
								dateile.setMoney(BigdecUitl.round(Double.valueOf(so.getDutysendmoney()),2).doubleValue());
							} else {
								dateile.setMoney(0.0);
							}
							dateile.setSalarytype("人民币");
							dateile.setStaffint(so.getStaffint());
							ile.add(dateile);
						}
						result.setList(ile);
						result.setPage(page);
						result.setParam(params);
						return result;
					} else {
						StringBuffer hql = new StringBuffer("from Solidmoney as s  where   s.staffint='" + params.getStaffint() + "' and s.datemoney<'" + st.getOpenDate() + "'");
						if (params.getDateBegin() != null && params.getDateEnd() != null) {
							hql.append("and  s.datemoney between  '" + params.getDateBegin() + "'  and  '" + params.getDateEnd() + "'");
						}
						Pagevo result = new Pagevo();
						List<Solidmoney> list = bo.findsalarydetail(hql.toString(), page);
						List<Salarydetail> ile = new ArrayList<Salarydetail>();
						for (Solidmoney so : list) {
							Salarydetail dateile = new Salarydetail();
							if (so.getMoneycount() != null && !"".equals(so.getMoneycount())) {
								dateile.setActual(Double.valueOf(so.getMoneycount()));
							} else {
								dateile.setActual(0.0);
							}
							if (so.getDatemoney() != null && !"".equals(so.getDatemoney())) {
								dateile.setDatemoney(so.getDatemoney());
							} else {
								dateile.setDatemoney("");
							}
							if (so.getDutycount() != null && !"".equals(so.getDutycount())) {
								dateile.setMoney(Double.valueOf(so.getDutysendmoney()));
							} else {
								dateile.setMoney(0.0);
							}
							dateile.setSalarytype("人民币");
							dateile.setStaffint(so.getStaffint());
							ile.add(dateile);
						}
						result.setList(ile);
						result.setPage(page);
						result.setParam(params);
						return result;
					}

				} else {
					return null;
				}
			}
		}

		return null;
	}

	/**
	 * 该方法已做修改
	 * 
	 * 
	 * @see 延迟发放年终奖
	 * @see before modify Dutymoney
	 * @see after modify SAL_SALARY_DATA;
	 * 
	 * */
	public Moneydetail findmoneyate(String id, String date) {

		// 税前工资
		List<Dutymoney> duty = bo.findymoney(id, date);
		SalSalaryData salarydata = bo.findSalaryData(id, date);
		Moneydetail mon = new Moneydetail();
		if (duty != null && duty.size() > 0) {
			if (duty.get(0) != null) {
				mon.setMoneyadjust(duty.get(0).getMoneyadjust() == null ? "0" : duty.get(0).getMoneyadjust());// 工资调整
				mon.setStaffmonery(duty.get(0).getStaffmonery() == null ? "0" : duty.get(0).getStaffmonery());// 员工基本工资
				// mon.setDuyWrad(duty.get(0).getDuyWrad() == null ? "0" :
				// duty.get(0).getDuyWrad());// 延迟发放年终奖
				// 修改后
				if (salarydata == null) {
					mon.setDuyWrad("0");// 延迟发放年终奖
				} else {
					mon.setDuyWrad(salarydata.getDuyWrad() == null ? "0" : salarydata.getDuyWrad());// 延迟发放年终奖
				}
				mon.setBfmoney(duty.get(0).getBfmoney() == null ? "0" : duty.get(0).getBfmoney());// 补发工资
				mon.setMoneyadjust(duty.get(0).getMoneyadjust() == null ? "0" : duty.get(0).getMoneyadjust());// 工资调整
				mon.setOvertimemoney(duty.get(0).getOvertimemoney() == null ? "0" : duty.get(0).getOvertimemoney());// 加班工资
				mon.setOvertimemeals(duty.get(0).getOvertimemeals() == null ? "0" : duty.get(0).getOvertimemeals());// 加班餐贴
				mon.setShiftallowance(duty.get(0).getShiftallowance() == null ? "0" : duty.get(0).getShiftallowance());// 轮班餐贴
				mon.setShiftallowances(duty.get(0).getShiftallowances() == null ? "0" : duty.get(0).getShiftallowances());// 轮班津贴
				mon.setBranchmoney(duty.get(0).getBranchmoney() == null ? new BigDecimal(0) : duty.get(0).getBranchmoney());// 部门奖励
				mon.setPerformamcem(duty.get(0).getPerformamcem() == null ? new BigDecimal(0) : duty.get(0).getPerformamcem());// 月度绩效奖金
				mon.setLoyalaward(duty.get(0).getLoyalaward() == null ? "0" : duty.get(0).getLoyalaward());// 忠诚奖
				mon.setYearaward(duty.get(0).getYearaward() == null ? new BigDecimal(0) : duty.get(0).getYearaward());// 年终奖
				mon.setDutyadd(duty.get(0).getDutyadd() == null ? new BigDecimal(0) : duty.get(0).getDutyadd());// 税前加
			} else {
				mon.setMoneyadjust("0");// 工资调整
				mon.setStaffmonery("0");// 员工基本工资
				mon.setDuyWrad("0");// 延迟发放年终奖
				mon.setBfmoney("0");// 补发工资
				mon.setMoneyadjust("0");// 工资调整
				mon.setOvertimemoney("0");// 加班工资
				mon.setOvertimemeals("0");// 加班餐贴
				mon.setShiftallowance("0");// 轮班餐贴
				mon.setShiftallowances("0");// 轮班津贴
				mon.setBranchmoney(new BigDecimal(0));// 部门奖励
				mon.setPerformamcem(new BigDecimal(0));// 月度绩效奖金
				mon.setLoyalaward("0");// 忠诚奖
				mon.setYearaward(new BigDecimal(0));// 年终奖
				mon.setDutyadd(new BigDecimal(0));// 税前加

			}
		}
		Double accumulPerAdjust = new Double(0);
		Double nursingPerAdjust = new Double(0);
		Double healthPerAdjust = new Double(0);
		Double unempPerAdjust = new Double(0);
		SalSocialAdjust adjust = bo.findsalsoialadjust(id, date);
		if (adjust != null) {
			if (adjust.getAccumulPerAdjust() != null && !"".equals(adjust.getAccumulPerAdjust())) {
				accumulPerAdjust = Double.valueOf(adjust.getAccumulPerAdjust());
			}
			if (adjust.getNursingPerAdjust() != null && !"".equals(adjust.getNursingPerAdjust())) {
				nursingPerAdjust = Double.valueOf(adjust.getNursingPerAdjust());
			}
			if (adjust.getHealthPerAdjust() != null && !"".equals(adjust.getHealthPerAdjust())) {
				healthPerAdjust = Double.valueOf(adjust.getHealthPerAdjust());
			}
			if (adjust.getUnempPerAdjust() != null && !"".equals(adjust.getUnempPerAdjust())) {
				unempPerAdjust = Double.valueOf(adjust.getUnempPerAdjust());
			}
		}
		// 查询出个人保险金
		List<Personalmoney> person = bo.findperson(id, date);
		if (person.size() > 0) {
			for (int i = 0; i < person.size(); i++) {
				if ("0".equals(person.get(i).getPersontype())) {
					mon.setPersonone(String.valueOf(DuctwayUitl.div(Double.valueOf(person.get(i).getAmountdou()) + accumulPerAdjust)));
				}
				if ("1".equals(person.get(i).getPersontype())) {
					mon.setPersontwo(String.valueOf(DuctwayUitl.div(Double.valueOf(person.get(i).getAmountdou()) + nursingPerAdjust)));
				}
				if ("2".equals(person.get(i).getPersontype())) {
					mon.setPersonshree(String.valueOf(DuctwayUitl.div(Double.valueOf(person.get(i).getAmountdou()) + healthPerAdjust)));
				}
				if ("3".equals(person.get(i).getPersontype())) {
					mon.setPersonfor(String.valueOf(DuctwayUitl.div(Double.valueOf(person.get(i).getAmountdou()) + unempPerAdjust)));

				}
			}
		} else {

			mon.setPersonone(String.valueOf(accumulPerAdjust));
			mon.setPersonshree(String.valueOf(nursingPerAdjust));
			mon.setPersontwo(String.valueOf(healthPerAdjust));
			mon.setPersonfor(String.valueOf(unempPerAdjust));
		}
		// 税前扣除

		List<Dutydeduct> deds = bo.finddeduct(id, date);
		if (deds.size() > 0) {
			// 税前扣除产假
			if (deds.get(0).getMasettle() != null && !"".equals(deds.get(0).getMasettle())) {

				mon.setMasettle(Double.valueOf(deds.get(0).getMasettle()));
			} else {
				mon.setMasettle(Double.valueOf(0));
			}
			// 税前扣除
			if (deds.get(0).getAmountdou() != null && !"".equals(deds.get(0).getAmountdou())) {
				mon.setDutydeduct(deds.get(0).getAmountdou());
			} else {
				mon.setDutydeduct("0");
			}

		} else {
			mon.setMasettle(Double.valueOf(0));
			mon.setDutydeduct("0");
		}
		// 查询工会费
		Tradecost tradecost = bo.findtradecost(id, date);
		if (tradecost != null) {
			if (tradecost.getTradecostdou() != null && !"".equals(tradecost.getTradecostdou())) {
				mon.setTradecostdou(tradecost.getTradecostdou());
			} else {
				mon.setTradecostdou("0");
			}
		} else {
			mon.setTradecostdou("0");
		}

		// 查询出请假扣款
		Leavebmoney lem = bo.findleaveb(id, date);
		if (lem != null) {

			mon.setLeavebmoneyone(Double.valueOf(StringUtils.isBlank(lem.getAmountdou()) ? "0" : lem.getAmountdou())); // 旷工金额（计算得来）

			if (lem.getAmountsick() != null && !"".equals(lem.getAmountsick())) {
				mon.setLeavebmoneytwo(Double.valueOf(lem.getAmountsick()));// 病假扣款
			} else {
				mon.setLeavebmoneytwo(Double.valueOf(0));// 病假扣款
			}
			if (lem.getAmountthing() != null && !"".equals(lem.getAmountthing())) {
				mon.setLeavebmoneyshree(Double.valueOf(lem.getAmountthing())); // 事假扣款
			} else {
				mon.setLeavebmoneyshree(Double.valueOf(0)); // 事假扣款
			}
		} else {
			mon.setLeavebmoneyone(Double.valueOf(0));// 旷工金额（计算得来）
			mon.setLeavebmoneytwo(Double.valueOf(0));// 病假扣款
			mon.setLeavebmoneyshree(Double.valueOf(0)); // 事假扣款
		}

		// 查询个人所得
		List<Personalduty> personalduties = bo.finddutyper(id, date);
		if (personalduties.size() > 0) {
			if (personalduties.get(0).getAmountdou() != null && !"".equals(personalduties.get(0).getAmountdou())) {
				mon.setPerreporduty(personalduties.get(0).getAmountdou());
			} else {
				mon.setPerreporduty("0");
			}
		} else {
			mon.setPerreporduty("0");
		}
		// 税后应发工资
		List<Dutycount> count = bo.findcount(id, date);
		if (count.size() > 0) {
			if (count.get(0).getDutybuckle() != null && !"".equals(count.get(0).getDutybuckle())) {
				mon.setDutybuckle(count.get(0).getDutybuckle());// 税后调整
			} else {
				mon.setDutybuckle("0");// 税后调整
			}
			if (count.get(0).getAlonedou() != null && !"".equals(count.get(0).getAlonedou())) {
				mon.setAlonedou(count.get(0).getAlonedou());// 独生子女费
			} else {
				mon.setAlonedou("0");// 独生子女费
			}
			if (count.get(0).getDutybackdou() != null && !"".equals(count.get(0).getDutybackdou())) {
				mon.setDutybackdou(count.get(0).getDutybackdou());// 税后饭贴
			} else {
				mon.setDutybackdou("0");// 税后饭贴
			}
			if (count.get(0).getBonusdou() != null && !"".equals(count.get(0).getBonusdou())) {
				mon.setBonusdou(count.get(0).getBonusdou());
			} else {
				mon.setBonusdou("0");// 税后一次性奖金
			}
			// 税后应发合计
			if (count.get(0).getAmountdou() != null && !"".equals(count.get(0).getAmountdou())) {
				mon.setDutysum(count.get(0).getAmountdou());
			} else {
				mon.setDutysum("0");
			}

		} else {
			mon.setDutybuckle("0");// 税后调整
			mon.setAlonedou("0");// 独生子女费
			mon.setDutybackdou("0");// 税后饭贴
		}
		// 税前工资
		Dutysendmoney dutysendmoney = bo.finddutysend(id, date);
		if (dutysendmoney != null) {
			if (dutysendmoney.getDutydeduct() != null && !"".equals(dutysendmoney.getDutydeduct())) {
				mon.setDutycount(BigdecUitl.round(Double.valueOf(dutysendmoney.getDutydeduct()), 2).toString());// 税前工资
			} else {
				mon.setDutycount("0");// 税前工资
			}
		} else {
			mon.setDutycount("0");// 税前工资
		}

		// 查询实发工资
		List<Solidmoney> mo = bo.findcountmoney(id, date);
		if (mo.size() > 0) {
			if (mo.get(0).getDutysendmoney() != null && !"".equals(mo.get(0).getDutysendmoney())) {
				mon.setDutysendmoney(BigdecUitl.round(Double.valueOf(mo.get(0).getDutysendmoney()), 2).toString());// 税前应发工资
			} else {
				mon.setDutysendmoney("0");// 税前应发工资
			}

			if (mo.get(0).getMoneycount() != null && !"".equals(mo.get(0).getMoneycount())) {
				mon.setAmountdou(mo.get(0).getMoneycount());// 实发工资
			} else {
				mon.setAmountdou("0");// 实发工资
			}
			mon.setDatemoney(mo.get(0).getDatemoney());// 日期
		} else {
			mon.setDutysendmoney("0");// 税前应发工资
			mon.setAmountdou("0");// 实发工资
			mon.setDutysendmoney("0");// 税前应发工资
		}
		// 派遣管理费
		List<Dispatchmanger> dispatchmangers = bo.finddispatchmanger(id, date);
		if (dispatchmangers.size() > 0) {
			if (dispatchmangers.get(0).getAmountdou() != null && !"".equals(dispatchmangers.get(0).getAmountdou())) {
				mon.setDispatchmanger(dispatchmangers.get(0).getAmountdou());
			} else {
				mon.setDispatchmanger("0");
			}
		} else {
			mon.setDispatchmanger("0");
		}

		return mon;
	}

	public Personalduty findger(String id, String date) {
		return bo.findger(id, date);
	}
}
